package br.edu.catolica.sadbc.entity;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Transient;

import org.jboss.seam.annotations.Name;

import br.edu.catolica.sadbc.entity.enums.Sexo;
import br.edu.catolica.sadbc.entity.enums.TipoUsuario;

@Entity
@Name(value = "docente")
@PrimaryKeyJoinColumn(name = "docente_id_pessoa", referencedColumnName = "id_pessoa")
public class Docente extends Pessoa {

	private static final long serialVersionUID = 1L;
	
	private Integer coordenador;
	// FIXME - valor antigo para relembrar
	// private Boolean coordenador = Boolean.FALSE;
	
	@OneToMany(mappedBy = "docente", targetEntity = AtividadeDocente.class, cascade = CascadeType.ALL)
	private List<AtividadeDocente> AtividadesDocente = new ArrayList<AtividadeDocente>();
	
	@OneToMany(targetEntity = Saida.class, mappedBy = "docente" ,fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Saida> saidas = new ArrayList<Saida>();
	
	@OneToOne(targetEntity = Usuario.class, cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER)
    @JoinColumn(name="id_usuario")
    private Usuario usuario = new Usuario();
	
	public Integer getCoordenador() {
		return coordenador;
	}

	public void setCoordenador(Integer coordenador) {
		this.coordenador = coordenador;
	}

	public List<AtividadeDocente> getAtividadesDocente() {
		return AtividadesDocente;
	}

	public void setAtividadesDocente(List<AtividadeDocente> atividadesDocente) {
		AtividadesDocente = atividadesDocente;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Saida> getSaidas() {
		return saidas;
	}

	public void setSaidas(List<Saida> saidas) {
		this.saidas = saidas;
	}
	
	public void addSaida(Saida saida) {
		saida.setDocente(this);
		getSaidas().add(saida);
	}
	
	public void addAtividadesDocente(AtividadeDocente atividadeDocente) {
		atividadeDocente.setDocente(this);
		getAtividadesDocente().add(atividadeDocente);
	}
	
	@Transient
	public String getSexoDescricao(Integer IdSexo) {
		return Sexo.getEnumDescription(IdSexo);
	}
	
	@Transient
	public String getTipoUsuarioDescricao(Integer idTipoUsuario) {
		return TipoUsuario.getEnumDescription(idTipoUsuario);
	}

}
